package Modelo;

import java.util.ArrayList;

public class Terminal {

	//Atributos
	
	private String rif;

	private String descripcion;
	
	private String direccion;
	
	private String telefono;
	
	private ArrayList<Multa> multas;
	
	private ArrayList<Cooperativa> cooperativas;
	
	private ArrayList<TipoPago> tiposPago;
	
	private ArrayList<DiaFeriado> diasferiados;
	
	//Constructor sin parametros
	
	public Terminal(){
		super();
		this.multas = new ArrayList<Multa>();
		this.cooperativas = new ArrayList<Cooperativa>();
		this.tiposPago = new ArrayList<TipoPago>();
		this.diasferiados = new ArrayList<DiaFeriado>();
	}
	
	//Constructor con parametros
	
	public Terminal(String rif, String descripcion, String direccion,
			String telefono, ArrayList<Multa> multas,
			ArrayList<Cooperativa> cooperativas, ArrayList<TipoPago> tiposPago, ArrayList<DiaFeriado> diasferiados) {
		super();
		this.rif = rif;
		this.descripcion = descripcion;
		this.direccion = direccion;
		this.telefono = telefono;
		this.multas = multas;
		this.cooperativas = cooperativas;
		this.tiposPago = tiposPago;
		this.diasferiados = diasferiados;
		
		}
	
	public Terminal(String rif, String descripcion, String direccion, String telefono ){
		super();
		this.rif = rif;
		this.descripcion = descripcion;
		this.direccion = direccion;
		this.telefono = telefono;
	}
	
	

	public ArrayList<DiaFeriado> getDiasferiados() {
		return diasferiados;
	}

	public void setDiasferiados(ArrayList<DiaFeriado> diasferiados) {
		this.diasferiados = diasferiados;
	}

	public String getRif() {
		return rif;
	}

	public void setRif(String rif) {
		this.rif = rif;
	}
	
	

	public ArrayList<TipoPago> getTiposPago() {
		return tiposPago;
	}

	public void setTiposPago(ArrayList<TipoPago> tiposPago) {
		this.tiposPago = tiposPago;
	}

	public String getDescripcion() {
		return descripcion;
	}

	public void setDescripcion(String descripcion) {
		this.descripcion = descripcion;
	}

	public String getDireccion() {
		return direccion;
	}

	public void setDireccion(String direccion) {
		this.direccion = direccion;
	}

	public String getTelefono() {
		return telefono;
	}

	public void setTelefono(String telefono) {
		this.telefono = telefono;
	}

	public ArrayList<Multa> getMultas() {
		return multas;
	}

	public void setMultas(ArrayList<Multa> multas) {
		this.multas = multas;
	}

	public ArrayList<Cooperativa> getCooperativas() {
		return cooperativas;
	}

	public void setCooperativas(ArrayList<Cooperativa> cooperativas) {
		this.cooperativas = cooperativas;
	}
	
	//Metodos de los arreglos Multas
	
	/**
	 * Metodo que permite agregar una multa en el ArrayList.
	 * @param multa informacion de la multa a agregar.
	 */
	public void agregarMulta(Multa multa){
		this.multas.add(multa);
	}
	
	/**
	 * Retorna la cantidad de multas que tiene el ArrayList
	 */
	public int contarMultas() {
		return this.multas.size();
	}
	
	/**
	 * Metodo que retorna la informacion de una multa del ArrayList de acuerdo a la posicion indicada.
	 * @param i posicion de la multa en el ArrayList
	 * @return informacion de la multa indicado.
	 */
	public Multa obtenerMulta(int i) {
		return this.multas.get(i);
	}
	
	/**
	 * Metodo que permite buscar la informacion de una multa en el ArrayList de acuerdo al codigo 
	 * @param codigo informacion del codigo de la multa a buscar en el ArrayList.
	 * @return la informacion de la multa en caso de encontrarlo o null en caso de no encontrar la multa en el ArrayList
	 */
	public Multa buscarMulta(String codigo) {
		for (int i = 0; i < contarMultas(); i++) {
			if (obtenerMulta(i).getCodigo().equals(codigo)) {
				return obtenerMulta(i);
			}
		}
		return null;
	}
	
	// Arreglo de Cooperativas
	
	/**
	 * Metodo que permite agregar una cooperativa en el ArrayList.
	 * @param cooperativa informacion de la cooperativa a agregar.
	 */
	public void agregarCooperativa(Cooperativa cooperativa){
		this.cooperativas.add(cooperativa);
	}
	
	/**
	 * Retorna la cantidad de cooperativas que tiene el ArrayList
	 */
	public int contarCooperativas() {
		return this.cooperativas.size();
	}
	
	/**
	 * Metodo que retorna la informacion de una cooperativa del ArrayList de acuerdo a la posicion indicada.
	 * @param i posicion de la cooperativa en el ArrayList
	 * @return informacion de la cooperativa indicado.
	 */
	public Cooperativa obtenerCooperativa(int i) {
		return this.cooperativas.get(i);
	}
	
	/**
	 * Metodo que permite buscar la informacion de una cooperativa en el ArrayList de acuerdo al codigo 
	 * @param codigo informacion del codigo de la cooperativa a buscar en el ArrayList.
	 * @return la informacion de la cooperativa en caso de encontrarlo o null en caso de no encontrar la cooperativa en el ArrayList
	 */
	public Cooperativa buscarCooperativa(String codigo) {
		for (int i = 0; i < contarCooperativas(); i++) {
			if (obtenerCooperativa(i).getCodigo().equals(codigo)) {
				return obtenerCooperativa(i);
			}
		}
		return null;
	}
	
	
	/**
	 * Metodo que permite buscar la informacion de una cooperativa en el ArrayList de acuerdo al nombre 
	 * @param nombre informacion del nombre de la cooperativa a buscar en el ArrayList.
	 * @return la informacion de la cooperativa en caso de encontrarlo o null en caso de no encontrar la cooperativa en el ArrayList
	 */
	public Cooperativa buscarCooperativaNombre(String nombre) {
		for (int i = 0; i < contarCooperativas(); i++) {
			if (obtenerCooperativa(i).getDescripcion().equals(nombre)) {
				return obtenerCooperativa(i);
			}
		}
		return null;
	}
	
	// Arreglo de Tipos de pago
	
		/**
		 * Metodo que permite agregar un Tipo de Pago en el ArrayList.
		 * @param tipopago informacion de el Tipo de Pago a agregar.
		 */
		public void agregarTipoPago(TipoPago tipopago){
			this.tiposPago.add(tipopago);
		}
		
		/**
		 * Retorna la cantidad de Tipos de Pago que tiene el ArrayList
		 */
		public int contarTiposPago() {
			return this.tiposPago.size();
		}
		
		/**
		 * Metodo que retorna la informacion de un Tipo de Pago del ArrayList de acuerdo a la posicion indicada.
		 * @param i posicion de el tip o de pago en el ArrayList
		 * @return informacion de el tipo de pago indicado.
		 */
		public TipoPago obtenerTipoPago(int i) {
			return this.tiposPago.get(i);
		}
		
		/**
		 * Metodo que permite buscar la informacion de un Tipo de pago en el ArrayList de acuerdo al codigo 
		 * @param codigo informacion del codigo del tipo de pago a buscar en el ArrayList.
		 * @return la informacion de el tipo de pago en caso de encontrarlo o null en caso de no encontrar el tipo de pago en el ArrayList
		 */
		public TipoPago buscarTipoPago(String codigo) {
			for (int i = 0; i < contarTiposPago(); i++) {
				if (obtenerTipoPago(i).getCodigo().equals(codigo)) {
					return obtenerTipoPago(i);
				}
			}
			return null;
		}
		
		//Metodos para el arreglo dia feriado
		
		//Metodos de los arreglos Multas
		
		/**
		 * Metodo que permite agregar un Dia feriado en el ArrayList.
		 * @param df informacion del dia feriado a agregar.
		 */
		public void agregarDiaFeriado(DiaFeriado df){
			this.diasferiados.add(df);
		}
		
		/**
		 * Retorna la cantidad de dias feriados que tiene el ArrayList
		 */
		public int contarDiasFeriados() {
			return this.diasferiados.size();
		}
		
		/**
		 * Metodo que retorna la informacion de un dia feriado del ArrayList de acuerdo a la posicion indicada.
		 * @param i posicion del dia feriado en el ArrayList
		 * @return informacion de el dia feriado indicado.
		 */
		public DiaFeriado obtenerDiaFeriado(int i) {
			return this.diasferiados.get(i);
		}
		
		/**
		 * Metodo que permite buscar la informacion de un dia feriado en el ArrayList de acuerdo al codigo 
		 * @param codigo informacion del codigo del dia feriado a buscar en el ArrayList.
		 * @return la informacion del dia feriado en caso de encontrarlo o null en caso de no encontrar el dai feriado en el ArrayList
		 */
		public DiaFeriado buscarDiaFeriado(String codigo) {
			for (int i = 0; i < contarDiasFeriados(); i++) {
				if (obtenerDiaFeriado(i).getCodigo().equals(codigo)) {
					return obtenerDiaFeriado(i);
				}
			}
			return null;
		}
		
	
	}
